package proto

type AgentInfo struct {
	AgentId          string `json:"agent_id"`
	AgentVer         int    `json:"agent_ver"`
	AgentTime        int64  `json:"agent_time"`
	AgentRateLimit   int64  `json:"agent_rate_limit"`
	AgentV6Reachable int    `json:"agent_v6_reachable"`
}

type BandwidthInfo struct {
	Bandwidth    int64 `json:"bandwidth"`
	RealTcpRate  int64 `json:"real_tcp_rate"`
	RealUdpRate  int64 `json:"real_udp_rate"`
	RealHttpRate int64 `json:"real_http_rate"`
}

type RunTimeInfo struct {
	SrvLastTime int64  `json:"srv_last_time"`
	EndTime     int64  `json:"end_time"`
	DebugInfo   string `json:"di"`
}

type InfoReq struct {
	AgentInfo
}

type LoginReq struct {
	AgentInfo
	BandwidthInfo
}

type AliveReq struct {
	AgentInfo
	BandwidthInfo
	RunTimeInfo
}

type ContainerReq struct {
	Timestamp     int64  `json:"ts"`
	InterfaceName string `json:"interface_name"`
	ContainerIp   string `json:"container_ip"`
	V6Addr        bool   `json:"v6_addr"`
	TcpDown       int64  `json:"tcp_down"`  // 单位:bps
	UdpDown       int64  `json:"udp_down"`  // 单位:bps
	HttpDown      int64  `json:"http_down"` // 单位:bps
	Down          uint64 `json:"down"`      // 单位:bps
}

type ContainerInfo struct {
	MaxDown int64 `json:"max_down"` // 单位:bps
	ContainerReq
}

type ExchangeReq struct {
	Timestamp       int64    `json:"ts"`
	MachineId       string   `json:"machine_id"`
	MonitorIp       string   `json:"monitor_ip"`
	Isp             string   `json:"isp"`
	InfoUrl         string   `json:"info_url"`          // 信息地址
	DownUrl         string   `json:"down_url"`          // 下载地址
	ProveV6Url      string   `json:"prove_v6_url"`      // v6探测地址
	DownTotal       uint64   `json:"down_total"`        // 单位:bps
	DownTotalV4     uint64   `json:"down_total_v4"`     // 单位:bps
	DownTotalV6     uint64   `json:"down_total_v6"`     // 单位:bps
	MaxDownTotal    int64    `json:"max_down_total"`    // 单位:bps
	MaxDownTotalV4  int64    `json:"max_down_total_v4"` // 单位:bps
	MaxDownTotalV6  int64    `json:"max_down_total_v6"` // 单位:bps
	TcpProportion   int64    `json:"tcp_proportion"`
	UdpProportion   int64    `json:"udp_proportion"`
	HttpProportion  int64    `json:"http_proportion"`
	DeltaProportion int64    `json:"delta_proportion"`
	OnlineV4Count   int64    `json:"online_v4_count"`
	OnlineV6Count   int64    `json:"online_v6_count"`
	ExpiredV4       []string `json:"expired_v4"`
	ExpiredV6       []string `json:"expired_v6"`
}

type PusherInfo struct {
	PusherId          string `json:"p_id"`
	PusherVer         int    `json:"p_v"`
	PusherTime        int64  `json:"p_t"`
	PusherRateLimit   int64  `json:"p_r_l"`
	PusherV6Reachable int    `json:"p_v6_r"`
	PusherDuration    int64  `json:"p_d"`
}

type PusherBandwidthInfo struct {
	Bandwidth int64 `json:"b"`
}

type PusherRunTimeInfo struct {
	SrvLastTime int64  `json:"s_l_t"`
	EndTime     int64  `json:"e_t"`
	DebugInfo   string `json:"d_i"`
}

type PusherInfoReq struct {
	PusherInfo
}

type PusherLoginReq struct {
	PusherInfo
	PusherBandwidthInfo
}

type PusherAliveReq struct {
	PusherInfo
	PusherBandwidthInfo
	PusherRunTimeInfo
}
